Objeto de D3.js que se comporta como una colecci贸n de elementos HTML.
d3.select()
d3.selectAll()
seleccion.select()
seleccion.selectAll()
d3.selectAll("rect")
.attr("y", 50)
.style("fill", "red")
.attr("x", (d, i, all) => 100 * i);
<svg>
<rect y="50" style="fill: red" x="0"></rect>
<rect y="50" style="fill: red" x="100"></rect>
<rect y="50" style="fill: red" x="200"></rect>
</svg>
Antes:
<body>
<ul></ul>
<ul></ul>
<ul></ul>
</body>
d3.selectAll("ul")
.append("li");
Despu茅s:
<body>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
</body>
d3.selectAll("ul");
d3.selectAll("ul")
.selectAll("li");
d3.selectAll("ul")
.selectAll("li");
selectAll("li")
por ejemplo en verdad no va a seleccionar todos todos todos, sino que seleccionar谩 todos los que se encuentren en el primer grupo? Por lo que debo de cierta forma ir avanzando de a poco en los grupos para llegar a un elemento que puede estar muy al fondo?seleccion.data
const datos = [23, 45, 120, 64];
d3.select("#svg")
.selectAll("rect")
.data(datos);
<svg id="svg" width="400" height="250">
<rect></rect> <!-- 23 -->
<rect></rect> <!-- 45 -->
<rect></rect> <!-- 120 -->
<rect></rect> <!-- 64 -->
</svg>
const datos = [23, 45, 120, 64];
const update = d3.select("#svg")
.selectAll("rect")
.data(datos);
<svg id="svg" width="400" height="250">
<rect></rect> <!-- 23 -->
<rect></rect> <!-- 45 -->
<rect></rect> <!-- 120 -->
<rect></rect> <!-- 64 -->
</svg>
const datos = [23, 45, 120, 64];
const update = d3.select("#svg")
.selectAll("rect")
.data(datos);
update.attr("width", 50)
.attr("y", 0)
.attr("x", (d, i, all) => i * 100);
<svg id="svg" width="400" height="250">
<rect></rect> <!-- 23 -->
<rect></rect> <!-- 45 -->
<rect></rect> <!-- 120 -->
<rect></rect> <!-- 64 -->
</svg>
const datos = [23, 45, 120, 64];
const update = d3.select("#svg")
.selectAll("rect")
.data(datos);
update.attr("width", 50)
.attr("y", 0)
.attr("x", (d, i, all) => i * 100);
<svg id="svg" width="400" height="250">
<rect width="50" y="0" x="0"></rect> <!-- 23 -->
<rect width="50" y="0" x="100"></rect> <!-- 45 -->
<rect width="50" y="0" x="200"></rect> <!-- 120 -->
<rect width="50" y="0" x="300"></rect> <!-- 64 -->
</svg>
const datos = [23, 45, 120, 64];
const update = d3.select("#svg")
.selectAll("rect")
.data(datos);
update.attr("width", 50)
.attr("y", 0)
.attr("x", (d, i, all) => i * 100)
.attr("height", (d, i, all) => 2 * d);
<svg id="svg" width="400" height="250">
<rect width="50" y="0" x="0"></rect> <!-- 23 -->
<rect width="50" y="0" x="100"></rect> <!-- 45 -->
<rect width="50" y="0" x="200"></rect> <!-- 120 -->
<rect width="50" y="0" x="300"></rect> <!-- 64 -->
</svg>
const datos = [23, 45, 120, 64];
const update = d3.select("#svg")
.selectAll("rect")
.data(datos);
update.attr("width", 50)
.attr("y", 0)
.attr("x", (d, i, all) => i * 100)
.attr("height", (d, i, all) => 2 * d);
<svg id="svg" width="400" height="250">
<rect width="50" y="0" x="0" height="46"></rect> <!-- 23 -->
<rect width="50" y="0" x="100" height="90"></rect> <!-- 45 -->
<rect width="50" y="0" x="200" height="240"></rect> <!-- 120 -->
<rect width="50" y="0" x="300" height="128"></rect> <!-- 64 -->
</svg>
const datos = [23, 45, 120, 64];
const update = d3.select("#svg")
.selectAll("rect")
.data(datos);
update.attr("width", 50)
.attr("y", 0)
.attr("x", (d, i, all) => i * 100)
.attr("height", (d, i, all) => 2 * d);
(d, i, all)
; el parametro lo reconoce como dato por ser "d" o por la posicion dentro de la funcion?
<svg id="svg" width="400" height="250">
<rect></rect>
<rect></rect>
<rect></rect>
<rect></rect>
</svg>
const datos = [23, 45];
d3.select("#svg")
.selectAll("rect")
.data(datos);
<svg id="svg" width="400" height="250">
<rect></rect> <!-- 23 -->
<rect></rect> <!-- 45 -->
<rect></rect> <!-- ? -->
<rect></rect> <!-- ? -->
</svg>
<svg id="svg" width="400" height="250">
<rect></rect>
<rect></rect>
<rect></rect>
<rect></rect>
</svg>
const datos = [23, 45];
const update = d3.select("#svg")
.selectAll("rect")
.data(datos);
update.exit().remove();
<svg id="svg" width="400" height="250">
<rect></rect> <!-- 23 -->
<rect></rect> <!-- 45 -->
<rect></rect> <!-- ? -->
<rect></rect> <!-- ? -->
</svg>
<svg id="svg" width="400" height="250">
<rect></rect>
<rect></rect>
<rect></rect>
<rect></rect>
</svg>
const datos = [23, 45];
const update = d3.select("#svg")
.selectAll("rect")
.data(datos);
update.exit().remove();
<svg id="svg" width="400" height="250">
<rect></rect> <!-- 23 -->
<rect></rect> <!-- 45 -->
</svg>
<svg id="svg" width="400" height="250">
</svg>
const datos = [23, 45, 120, 64];
d3.select("#svg")
.selectAll("rect")
.data(datos);
<svg id="svg" width="400" height="250">
<!-- ? -->
</svg>
<svg id="svg" width="400" height="250">
</svg>
const datos = [23, 45, 120, 64];
d3.select("#svg")
.selectAll("rect")
.data(datos)
.enter();
<svg id="svg" width="400" height="250">
<!-- ? -->
</svg>
<svg id="svg" width="400" height="250">
</svg>
const datos = [23, 45, 120, 64];
d3.select("#svg")
.selectAll("rect")
.data(datos)
.enter()
.append("rect");
<svg id="svg" width="400" height="250">
<!-- ? -->
</svg>
<svg id="svg" width="400" height="250">
</svg>
const datos = [23, 45, 120, 64];
d3.select("#svg")
.selectAll("rect")
.data(datos)
.enter()
.append("rect");
<svg id="svg" width="400" height="250">
<rect></rect> <!-- 23 -->
<rect></rect> <!-- 45 -->
<rect></rect> <!-- 120 -->
<rect></rect> <!-- 64 -->
</svg>
const datos = [23, 45, 120, 64];
d3.select("#svg")
.selectAll("rect")
.data(datos)
.enter()
.append("rect")
.attr("width", 50)
.attr("y", 0)
.attr("x", (d, i, all) => i * 100)
.attr("height", (d, i, all) => 2 * d);
<svg id="svg" width="400" height="250">
<rect></rect> <!-- 23 -->
<rect></rect> <!-- 45 -->
<rect></rect> <!-- 120 -->
<rect></rect> <!-- 64 -->
</svg>
const datos = [23, 45, 120, 64];
d3.select("#svg")
.selectAll("rect")
.data(datos)
.enter()
.append("rect")
.attr("width", 50)
.attr("y", 0)
.attr("x", (d, i, all) => i * 100)
.attr("height", (d, i, all) => 2 * d);
<svg id="svg" width="400" height="250">
<rect width="50" y="0" x="0" height="46"></rect> <!-- 23 -->
<rect width="50" y="0" x="100" height="90"></rect> <!-- 45 -->
<rect width="50" y="0" x="200" height="240"></rect> <!-- 120 -->
<rect width="50" y="0" x="300" height="128"></rect> <!-- 64 -->
</svg>
const svg = d3.select("body").append("svg");
const datos = [150, 256, 130, 0, 23, 422, 235];
svg.attr("width", 50 + datos.length * 100).attr("height", 500);
svg
.selectAll("rect")
.data(datos)
.enter()
.append("rect")
.attr("width", 50)
.attr("fill", "magenta")
.attr("height", (d) => d)
.attr("x", (_, i) => 50 + i * 100);
join
para flujo usual de data join
svg
.selectAll("rect")
.data(datos)
.join("rect");
svg
.selectAll("rect")
.data(datos)
.join(
enter => enter.append("rect"),
update => update,
exit => exit.remove()
);
data
queda en los elementos, no en la selecci贸n misma.data
queda en los elementos, no en la selecci贸n misma.data
.data
queda en los elementos, no en la selecci贸n misma.data
.Propuesto por estudiante Fabi谩n Sep煤lveda Rivas.
(Fuente: Gapminder Tools)
隆Fundaci贸n Gapminder desarrolla herramienta de visualizaci贸n que contruye sobre D3!
(Fuente: Vizabi)
Ayudant铆a 4 (7 de septiembre) comenzar谩n jugando con D3.js. 隆Recomendada!
Ayudant铆a 4 (7 de septiembre) comenzar谩n jugando con D3.js. 隆Recomendada!
Viernes 11 de septiembre (20:00) termina plazo de Hito 1.